// 如何在JS中实现函数重载呢
// JS重载只要是参数类型不同导致的重载，参数类型不同主要分为 类型不一致以及参数个数不一致
// 类型不一致的重载如果不适用TS等预编译器的话是没有什么很好的办法解决的,我们最多只能在函数内部进行条件判断函数的参数类型
// 对于参数个数不一致的重载,有个利用闭包很巧妙的实现方式.


// 在对象obj上面添加一个名字为name的方法fn
const addMethod = function(obj,name,fn) {
    const oldF = obj[name];
    obj[name] = function() {
        if(arguments.length === fn.length) {
            fn.call(this,...arguments);
        } else if(typeof oldF === 'function') {
            oldF.call(this,...arguments)
        }
    }
};

let dic = {
    name: "black killer"
}

addMethod(dic,"kill",function(){
    console.log(`${this.name} kill no one`);
})

addMethod(dic,"kill",function(name){
    console.log(`${this.name} kill ${name}`);
})

dic.kill();
dic.kill("do");



